home *** CD-ROM | disk | FTP | other *** search
/ Gekikoh Dennoh Club 1 / Gekikoh Dennoh Club Vol. 1 (Japan).7z / Gekikoh Dennoh Club Vol. 1 (Japan) (Track 1).bin / kowin / archive / sys / kowin14d.lzh / smpl / OMAKE / smpl.c < prev    next >
C/C++ Source or Header  |  1995-12-01  |  3KB  |  142 lines

  1. /* shputlib サンプル  1994 Ogasawara Hiroyuki (COR.) */
  2.  
  3. #include    <corlib.h>
  4. #include    "shput.h"
  5.  
  6. asm( "RAND    equ    $fe0e" );
  7. DOSCALL    int        RAND(void);
  8.  
  9. /*-----------------------------------------------------------------*/
  10. /* かなり手抜き版の移動処理 … shot はもちょっとちゃんと管理してる */
  11.  
  12. #include    "Em007.INC"
  13.  
  14. struct table {
  15.     short    x, y, dx, dy;
  16. } Tbl[100];
  17.  
  18. int    SystemCounter= 0;
  19. int    x= -16, y= 3;
  20.  
  21. ObjectInit()
  22. {
  23.     int    i;
  24.     struct table *tp= Tbl;
  25.     for( i= 0 ; i< 100 ; i++, tp++ )
  26.         tp->x= -1;
  27. }
  28.  
  29. TableAdd( x, y, dx, dy )
  30. {
  31.     int    i;
  32.     struct table *tp= Tbl;
  33.     for( i= 0 ; i< 100 ; i++, tp++ ){
  34.         if( tp->x < 0 ){
  35.             tp->x= x;
  36.             tp->y= y;
  37.             tp->dx= dx;
  38.             tp->dy= dy;
  39.             return;
  40.         }
  41.     }
  42. }
  43.  
  44. ObjectMove()
  45. {
  46.     int    i;
  47.     struct table *tp= Tbl;
  48.     for( i= 0 ; i< 100 ; i++, tp++ ){
  49.         if( tp->x >= 0 ){
  50.             Clr4x4( tp->x, tp->y );
  51.             tp->x+= tp->dx;
  52.             tp->y+= tp->dy;
  53.             if( tp->x >= 208 || tp->y < -10 || tp->y >= 100 )
  54.                 tp->x= -1;
  55.             if( tp->x >= 0 )
  56.                 Put4x4( tp->x, tp->y );
  57.         }
  58.     }
  59.     if( (++SystemCounter) & 1 ){
  60.         Clr16x16( x, y );
  61.         if( ++x >= 208 ){
  62.             x= -16;
  63.             y= RAND() % 84;
  64.         }
  65.         Put16x16( x, y, Em0071 );
  66.         if( RAND() % 21 == 3 ){
  67.             TableAdd( x+6, y+6, 1, 0 );
  68.             TableAdd( x+6, y+6,-1, 0 );
  69.             TableAdd( x+6, y+6, 0, 1 );
  70.             TableAdd( x+6, y+6, 0,-1 );
  71.             TableAdd( x+6, y+6, 1, 1 );
  72.             TableAdd( x+6, y+6, 1,-1 );
  73.             TableAdd( x+6, y+6,-1, 1 );
  74.             TableAdd( x+6, y+6,-1,-1 );
  75.         }
  76.     }
  77. }
  78.  
  79.  
  80. /*-----------------------------------------------------------------*/
  81. /* 以下、ウィンドウ処理部                                          */
  82.  
  83. #define    EventMask    (EventOpenON    \
  84.             |EventCloseON    \
  85.             |EventRedrawON    \
  86.             |EventMouseSwitchON    )
  87. #define    EventInt    (EventMask|EventIntervalON)
  88.  
  89. #define    XOFFSET        0
  90. #define    YOFFSET        0
  91.  
  92. #define    XSIZE        208
  93. #define    YSIZE        100
  94.  
  95. static Sheet    Vram= { SHXSIZE, SHYSIZE, SHXSIZE/16, vrambuf, vrambuf };
  96. int        WAIT= 4;
  97.  
  98. Exec( wp, info )
  99. WindowID    wp;
  100. EventInfo    *info;
  101. {
  102.     static int    Wait;
  103.     static DrawBuf    Dbuf[2];
  104.     switch( info->option ){
  105.     case EventInterval:
  106.         if( ++Wait < WAIT )
  107.             return    FALSE;
  108.         Wait= 0;
  109.         ObjectMove();
  110.         WindowDraw( wp, Dbuf+1, 1 );
  111.         return    TRUE;
  112.     case EventOpen:
  113.         ObjectInit();
  114.         A_Cls();
  115.         DrawSetClear( Dbuf, 0 );
  116.         DrawSetPut( Dbuf+1, XOFFSET, YOFFSET, &Vram );
  117.         WindowRedraw( wp );
  118.         WindowSetEventAttr( wp, EventInt );
  119.         return    TRUE;
  120.     case EventClose:
  121.         WindowClose( wp );
  122.         WindowConnectionClose();
  123.         return    TRUE;
  124.     case EventRedraw:
  125.         WindowDraw( wp, Dbuf, 2 );
  126.         return    TRUE;
  127.     }
  128.     return    FALSE;
  129. }
  130.  
  131. WindowMain( argc, argv )
  132. char    **argv;
  133. {
  134.     int    x= 434, y= 0;
  135.     argc= AnalyzeArgs( argc, argv, &x, &y, 0, 0 );
  136.     if( --argc && **++argv == '-' && (*argv)[1] == 'w' )
  137.         WAIT= _atoiX( *argv+2 );
  138.     WindowTitleOpen( x, y, XSIZE, YSIZE+YOFFSET, NULL,
  139.                     "shput-sample", Close|Push, Exec );
  140. }
  141.  
  142.